﻿// Описание рекурсии

using System;

class RecursionDemo
{
    public static void _Main()
    {
        Recursion r = new Recursion();

        Console.WriteLine(r.FactI(5));

        Console.WriteLine(r.FactR(5));

        r.RecurseString("Пример рекурсии");

        Console.ReadLine();
    }
}

class Recursion
{ 
    // Рекурсивное нахождение факториала
    public int FactR(int num)
    {
        int result = 1;

        if (num == 1) return result;

        result *= FactR(num - 1) * num;

        return result;
    }

    // Итерационное нахождение факториала
    public int FactI(int num)
    {
        int result = 1;

        for (int i = 1; i <= num; i++)
        {
            result *= i;
        }

        return result;
    }

    // Рекурсивное отображение строкового значения в обратном порядке

    public void RecurseString(string str)
    {
        string result = "";

        if (str.Length > 0)
            RecurseString(str.Substring(1, str.Length - 1));
        else return;

        Console.Write(str[0]);
    }
}

